洛谷题解 CF810A 【Straight 《A》】

这题的思路:

简单循环枚举即可,因为数据量小。

主要的问题在于四舍五入。

枚举虽然看起来偷懒,但是在赛场上在数据以及时间空间限制允许的情况下,总比你跑数论好(省做题时间)。

我们知道1.51.61.71.81.92.02.12.22.32.4四舍五入都为2,我们可以将其扩大十倍,即15161718192021222324

由于C++中的/是整除,这样我们就可以判断当扩大后的数被整除后,与k*10的误差范围为-5~4时即可判断相等。

至于小数点后面第二位及以后的数其实对此影响不大,因为扩大十倍后15.00001在整除中还是15,24.999999在整除中还是24

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream>
#include<cstdio>
using namespace std;

int n,k,num[110],cot=0,sum=0;

int main()
{
scanf("%d%d",&n,&k);
k=k*10;//扩大十倍
for(int a=1;a<=n;a++)
{
scanf("%d",&num[a]);
sum=sum+num[a]*10;//扩大十倍
}
while(true)//无限循环判断
{
if((sum+cot*k)/(n+cot)>=k-5&&(sum+cot*k)/(n+cot)<k+5)
{
printf("%d\n",cot);
break;
}
cot++;//累加k的个数
}
return 0;
}

题目详见:https://www.luogu.com.cn/problem/CF810A